package com.qf;

import com.qf.pojo.User;
import com.qf.pojo.UserVo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author 孙亚梅
 * @version V1.0
 * @Project javase2203
 * @Package com.qf.controller
 * @Description:
 * @Date 2022/6/7 21:27
 */
@Controller
@RequestMapping("/param")
public class ParamController {

    /**
     * 演示springMvc默认支持的接收参数类型：
     *      默认支持的参数就是可以加在方法参数上，也可以不加，
     *      可以按照自己需要添加删除  HttpServletRequest,HttpSession,HttpServletResponse,Model
     *
     *  如果controller方法返回string字符串，那么就认为这个字符串就是页面路径，
     *  会自动走视图解析器，拼接视图解析器中的前缀和后缀组装完整的页面路径
     */
    @RequestMapping("/test1")
    public  String test1(HttpServletRequest request, HttpServletResponse response, Model model){
        String id = request.getParameter("id");
        String name = request.getParameter("name");

        System.out.println("======id=============="+id);
        System.out.println("=======name============="+name);

        //相当于request.setAttribute方法，将数据放入请求域中带到页面中展示使用
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return  "hello";

        }

    /**
     * 测试接收浏览器发送过来的基本类型参数
     * 参数：integet,float,double,boolean,string等
     */
    @RequestMapping("/test2")
    public  String test2(Integer id,String name,Model model){

        System.out.println("======id=============="+id);
        System.out.println("=======name============="+name);

        //相当于request.setAttribute方法，将数据放入请求域中带到页面中展示使用
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return  "hello";

    }

    /**
     * 接收pojo实体类，类型参数
     * 使用：浏览器传入的参数过多，可以将这些参数封装成实体类来进行 接收

     */
    @RequestMapping("/test3")
    public  String test3(User user, Model model){

        System.out.println("======user=============="+user);


        //相当于request.setAttribute方法，将数据放入请求域中带到页面中展示使用
        model.addAttribute("user",user);

        //指定返回数据并跳转到hello页面
        return  "hello";

    }


    /**
     * 接收数组类型参数：
     *      一般页面中如果表单使用post方式提交，那么checkbox复选框提交的内容，一般都是数组
     *      那么要求name属性名称，必须等于接收的变量名

     */
    @RequestMapping("/test4")
    public  String test4(String[] hobby,Model model){

        System.out.println("======hobby=============="+hobby);


        //相当于request.setAttribute方法，将数据放入请求域中带到页面中展示使用
        model.addAttribute("hobby",hobby);

        //指定返回数据并跳转到hello页面
        return  "hello";

    }

    /**
     * 演示接收List类型参数，一般行编辑需求的时候使用
     */
    @RequestMapping("/test5")
    public  String test5(UserVo vo , Model model){

        System.out.println("======userList=============="+vo);

        //指定返回数据并跳转到hello页面
        return  "hello";

    }

    /**
     *演示接收restful风格参数
     * 访问路径：http://localhost:8080/类的路径/方法的路径/1/张三
     */
    @RequestMapping("/test6/{xx}/{name}")
    public  String test6(@PathVariable("xx") Integer id,
                         @PathVariable("name") String name,HttpServletRequest request) throws  Exception{

        System.out.println("===================="+id +name);

        //指定返回数据并跳转到hello页面
        return  "hello";

    }

    /**
     * 演示重定向
     */
    @RequestMapping("/test7")
    public  String test7(Integer id,
            String name,HttpServletRequest request,Model model) throws  Exception{

        System.out.println("===================="+id +name);

        //将参数放入request请求域中，用于带到转发后的方法中使用
        //request.setAttribute("id",id);
        //request.setAttribute("name",name);

        //将参数放入model中，也就相当于放入request域中，带到转发后的方法中使用
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return  "forward:/parm/test3";

    }

    @RequestMapping("/test8")
    public  String test8(Integer id,
                         String name,HttpServletRequest request,Model model) throws  Exception{

        System.out.println("===================="+id +name);

        //将参数放入request请求域中，用于带到转发后的方法中使用
        //request.setAttribute("id",id);
        //request.setAttribute("name",name);

        //将参数放入model中，也就相当于放入request域中，带到转发后的方法中使用
        model.addAttribute("id",id);
        model.addAttribute("name",name);
        //指定返回数据并跳转到hello页面
        return  "redirect://www.baidu.com";

    }
}
